/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */


package sistematesis;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import javax.swing.JOptionPane;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

public class Aprobacion  extends javax.swing.JDialog{

    public static Integer TotalAsignaturas;
    public static Integer Aprobados;
    Double IntervaloPeriodoDesde;
    Double IntervaloPeriodoHasta;
    public static ArrayList DetalleAprobacion;
    public static ArrayList CantidadPorPeriodo;
    public static ArrayList Asignaturas;
    public static ArrayList CantidadPorProfesor;
    public static ArrayList CantidadPorAreaDeConocimiento;
    public static ArrayList RPR;

    /* DEVUELVE PORCENTAJE DE APROBACIÓN DENTRO DEL PERIODO*/
    public  Double porcentajeAprobacion(String Ruta, Double DesdeParam, Double HastaParam) throws IOException, InterruptedException {
        
        DetalleAprobacion=new ArrayList();
        RPR=new ArrayList();
        String ruta = Ruta;
        Double Desde=DesdeParam;
        Double Hasta=HastaParam;
        HSSFWorkbook libro = new HSSFWorkbook(new FileInputStream(ruta));
        HSSFSheet hoja = libro.getSheet(libro.getSheetName(0));
        HSSFRow row = null;
        HSSFCell cell = null;
        Double Apr=0.0,Total=0.0,Porcent=0.0;
        int Estado=8;
        int AñoSemestre=2;
        int rut =0;
        int j=0,u=0;
        /* RECORRE DOCUMENTO*/
        for ( int i=1, z=hoja.getLastRowNum(); i<=z; i++ )
        {
           row = hoja.getRow(i);
           if (row != null) {
                cell = row.getCell((int) AñoSemestre);
             if (cell != null)
                {
                /*Obtiene AñoSemestre de la celda*/
                String StrAux=new String();
                StrAux= cell.getStringCellValue().trim();//obtiene valor de celda como String y elimina espacios con "trim"
                StrAux=StrAux.replace(" ", "");//Elimina Espacios Internos
                Double Periodo=Double.parseDouble(StrAux.substring(0,4));//separa el año desde el String y lo convierte en double
                
                if(StrAux.substring(5).equals("2")){//si el periodo corresponde al segundo semestre agrega 0.5 al año almacenado en Periodo
                Periodo=Periodo+0.5;//Periodo continene el año Extraido como Double.             
                    }
                /*FIN OBTENCION AÑOSEMESTRE*/
                         if(Desde<=Periodo && Periodo<=Hasta)
                         {
                              String celda;
                              celda = row.getCell((int) Estado).toString().trim();
                              celda.replace(" ", "");
                           if(celda.equals("APR"))// Verifica que celda alumno aprobado.
                                {
                                Apr++;
                                Total++;
                                DetalleAprobacion.add(new ArrayList());
                                ((ArrayList)DetalleAprobacion.get(j)).add(row.getCell((int)rut).toString()); //rut
                                ((ArrayList)DetalleAprobacion.get(j)).add(row.getCell((int)AñoSemestre).toString());//añoSemestre
                                ((ArrayList)DetalleAprobacion.get(j)).add(row.getCell(6).toString());//nombreAsignatura
                                ((ArrayList)DetalleAprobacion.get(j)).add(row.getCell(10).toString().replace(" ","").trim());//generico
                                ((ArrayList)DetalleAprobacion.get(j)).add(row.getCell(11).toString());//NombreProfesor
                                j++;
                            }else{ 
                                Total++;
                            }
                                       if(celda == null ? ("APR") != null : !celda.equals("APR"))// Verifica que celda alumno aprobado.
                                {
                                    RPR.add(new ArrayList());
                                    ((ArrayList)RPR.get(u)).add(row.getCell(0).toString().replace(" ","").trim());
                                    ((ArrayList)RPR.get(u)).add(row.getCell(1).toString().replace(" ","").trim());
                                    ((ArrayList)RPR.get(u)).add(row.getCell(2).toString().replace(" ","").trim());
                                    ((ArrayList)RPR.get(u)).add(row.getCell(3).toString().replace(" ","").trim());
                                    ((ArrayList)RPR.get(u)).add(row.getCell(4).toString().replace(" ","").trim());
                                    ((ArrayList)RPR.get(u)).add(row.getCell(5).toString().replace(" ","").trim());
                                    ((ArrayList)RPR.get(u)).add(row.getCell(6).toString().replace(" ","").trim());
                                    ((ArrayList)RPR.get(u)).add(row.getCell(7).toString().replace(" ","").trim());
                                    ((ArrayList)RPR.get(u)).add(row.getCell(8).toString().replace(" ","").trim());
                                    ((ArrayList)RPR.get(u)).add(row.getCell(9).toString().replace(" ","").trim());
                                    ((ArrayList)RPR.get(u)).add(row.getCell(10).toString().replace(" ","").trim());
                                    ((ArrayList)RPR.get(u)).add(row.getCell(11).toString().replace(" ","").trim());
                                    u++;
                             }
                        }

                    }
             }
        }
        /*FIN RECORRIDO DE ARCHIVO*/

    TotalAsignaturas=Total.intValue();
    Aprobados=Apr.intValue();

    Porcent=(Apr*100)/Total;
   
    return Porcent;
    }

    public static ArrayList DetalleAprobacion(){
        
        return DetalleAprobacion;
    }

    public static Integer TotalAsignaturas(){

        return TotalAsignaturas;
    }

    public static Integer Aprobados(){

        return Aprobados;
    }


    public static ArrayList porPeriodo(String Ruta,Double PeriodoDesde, Double PeriodoHasta, int CantidadPeriodos) throws FileNotFoundException, IOException{
        CantidadPorPeriodo=new ArrayList();
        String ruta = Ruta;
        Double Desde=PeriodoDesde;
        Double Hasta=PeriodoHasta;
        HSSFWorkbook libro = new HSSFWorkbook(new FileInputStream(ruta));
        HSSFSheet hoja = libro.getSheet(libro.getSheetName(0));
        HSSFRow row = null;
        HSSFCell cell = null;
        

        int Estado=8;
        int AñoSemestre=2;
        int rut =0;
        int j=0;
        /* RECORRE DOCUMENTO*/
        for ( int i=1, z=hoja.getLastRowNum(); i<=z; i++ )
        {
           row = hoja.getRow(i);
           if (row != null) {
                cell = row.getCell((int) AñoSemestre);
             if (cell != null)
                {
                /*Obtiene AñoSemestre de la celda*/
                String StrAux=new String();
                StrAux= cell.getStringCellValue().trim();//obtiene valor de celda como String y elimina espacios con "trim"
                StrAux=StrAux.replace(" ", "");//Elimina Espacios Internos
                Double Periodo=Double.parseDouble(StrAux.substring(0,4));//separa el año desde el String y lo convierte en double
                if(StrAux.substring(5).equals("2")){//si el periodo corresponde al segundo semestre agrega 0.5 al año almacenado en Periodo
                Periodo=Periodo+0.5;//Periodo continene el año Extraido como Double.
                    }
//                 System.out.println("-"+Periodo);
                /*FIN OBTENCION AÑOSEMESTRE*/
                         if(Desde<=Periodo && Periodo<=Hasta)
                         {
                              String celda;
                              celda = row.getCell((int) Estado).toString().trim();
                              celda.replace(" ", "");
                           if(celda.equals("APR"))// Verifica que celda alumno aprobado.
                                {
//                           
                               if(busca(CantidadPorPeriodo,row.getCell((int)AñoSemestre).toString())){
//                                    int pos=(Pocision(DetalleAprobacion, row.getCell((int)AñoSemestre).toString()));
                                    int aux=Integer.parseInt((((ArrayList)CantidadPorPeriodo.get((Pocision(CantidadPorPeriodo, row.getCell(2).toString().replace(" ","").trim(),"porPeriodo")))).get(1)).toString().replace(" ","").trim());
                                    aux++;
                                    ((ArrayList)CantidadPorPeriodo.get((Pocision(CantidadPorPeriodo, row.getCell(2).toString(),"porPeriodo")))).set(1, aux);
                                    aux=Integer.parseInt((((ArrayList)CantidadPorPeriodo.get((Pocision(CantidadPorPeriodo, row.getCell(2).toString().replace(" ","").trim(),"porPeriodo")))).get(2)).toString().replace(" ","").trim());
                                    aux++;
                                    ((ArrayList)CantidadPorPeriodo.get((Pocision(CantidadPorPeriodo, row.getCell(2).toString(),"porPeriodo")))).set(2, aux);
                                        
                               }else{
                                    CantidadPorPeriodo.add(new ArrayList());
                                    ((ArrayList)CantidadPorPeriodo.get(j)).add(row.getCell(2).toString().replace(" ", "").trim());
                                    ((ArrayList)CantidadPorPeriodo.get(j)).add(1);//total aprobados
                                    ((ArrayList)CantidadPorPeriodo.get(j)).add(1);//total general
                                    j++;

                               }
                            }else{
                              if(busca(CantidadPorPeriodo,row.getCell((int)AñoSemestre).toString())){
//                                    int pos=(Pocision(DetalleAprobacion, row.getCell((int)AñoSemestre).toString()));
                                    int aux=Integer.parseInt((((ArrayList)CantidadPorPeriodo.get((Pocision(CantidadPorPeriodo, row.getCell(2).toString().replace(" ","").trim(),"porPeriodo")))).get(2)).toString().replace(" ","").trim());
                                    aux++;
                                    ((ArrayList)CantidadPorPeriodo.get((Pocision(CantidadPorPeriodo, row.getCell(2).toString(),"porPeriodo")))).set(2, aux);
                                    

                               }else{
                                    CantidadPorPeriodo.add(new ArrayList());
                                    ((ArrayList)CantidadPorPeriodo.get(j)).add(row.getCell(2).toString().replace(" ", "").trim());
                                     ((ArrayList)CantidadPorPeriodo.get(j)).add(0);//total aprobados
                                    ((ArrayList)CantidadPorPeriodo.get(j)).add(1);
                                    j++;
                             }
                           }
                        }
                    }
             }
        }
            return CantidadPorPeriodo;

    }

    public static ArrayList porAsignaturas(String RutaFuente,String RutaMalla,Double PeriodoDesde, Double PeriodoHasta, int CantidadPeriodos) throws FileNotFoundException, IOException{

    /**LLENA ARREGLO CON CODIGOS DE ASIGNTURAS**/
        Asignaturas=new ArrayList();
        String ruta = RutaMalla;
        HSSFWorkbook libro = new HSSFWorkbook(new FileInputStream(ruta));
        HSSFSheet hoja = libro.getSheet(libro.getSheetName(0));
        HSSFRow row = null;
        HSSFCell cell = null;
        int j=0;

        /* RECORRE DOCUMENTO*/
        for ( int i=1, z=hoja.getLastRowNum(); i<=z; i++ )
        {
           row = hoja.getRow(i);
           if (row != null) {
                cell = row.getCell(2);//captura el año semestre
             if (cell != null)
                {
                   if(!busca(Asignaturas,row.getCell(2).toString().replace(" ", "").substring(0,6))){
                   Asignaturas.add(new ArrayList()); //contiene los datos de la malla
                  ((ArrayList)Asignaturas.get(j)).add(row.getCell(2).toString().replace(" ", "").substring(0,6));//Codigo de Asignatura
                  ((ArrayList)Asignaturas.get(j)).add((int)0);//nuemro entero para contabilizar
                  ((ArrayList)Asignaturas.get(j)).add((int)0);//nuemro entero para total inscripciones
                  ((ArrayList)Asignaturas.get(j)).add(row.getCell(3).toString());//nombre de la asignatura
                  ((ArrayList)Asignaturas.get(j)).add(row.getCell(4).toString());//area de conocimiento
                  j++;
                    }
                }
             }           
        }
//        System.out.println(Asignaturas);
//        System.out.println(DetalleAprobacion);
      /**FIN LLENA ARREGLO CON CODIGOS DE ASIGNATURAS**/

      /*VERIFICA NIVEL DE APROBACION POR ASIGNATURA COMPARANDO CODIGOS EN ASIGNATURAS Y DETALLE APROBACION*/
//        System.out.println(DetalleAprobacion.size());
//        System.out.println(Asignaturas.size());
        for(int i=0; i<DetalleAprobacion.size();i++){
            for(int z=0;z<Asignaturas.size();z++){
             String Aux=((ArrayList)DetalleAprobacion.get(i)).get(3).toString().replace(" ", "").trim();
             if(Aux.length()>5&&((ArrayList)Asignaturas.get(z)).get(0).toString().equals(Aux.substring(0,6))){
//              System.out.println(Aux.substring(0,6)+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa  encontre uno"+ ((ArrayList)Asignaturas.get(z)).get(0).toString());
              int aux=0;
              aux=Integer.parseInt(((ArrayList)Asignaturas.get(z)).get(1).toString());
              aux++;
              ((ArrayList)Asignaturas.get(z)).set(1, aux);
          }
               
        }
         
      }

         /**LLENA ARREGLO CON CODIGOS DE ASIGNTURAS**/
        
        String ruta1 = RutaFuente;
        HSSFWorkbook libro1 = new HSSFWorkbook(new FileInputStream(ruta1));
        HSSFSheet hoja1 = libro1.getSheet(libro1.getSheetName(0));
        HSSFRow row1 = null;
        HSSFCell cell1 = null;
        int j1=0;

        /* RECORRE DOCUMENTO*/
        for ( int i1=1, z1=hoja1.getLastRowNum(); i1<=z1; i1++ )
        {
           row1 = hoja1.getRow(i1);
           if (row1 != null) {
                cell1 = row1.getCell(2);//captura el codigo de la asignatura
             if (cell1 != null)
                {
                  /*Obtiene AñoSemestre de la celda*/
                String StrAux=new String();
                StrAux= cell1.getStringCellValue().trim();//obtiene valor de celda como String y elimina espacios con "trim"
                StrAux=StrAux.replace(" ", "");//Elimina Espacios Internos
                Double Periodo=Double.parseDouble(StrAux.substring(0,4));//separa el año desde el String y lo convierte en double
                if(StrAux.substring(5).equals("2")){//si el periodo corresponde al segundo semestre agrega 0.5 al año almacenado en Periodo
                Periodo=Periodo+0.5;//Periodo continene el año Extraido como Double.
                    }
//                 System.out.println("-"+Periodo);
                /*FIN OBTENCION AÑOSEMESTRE*/
                         if(PeriodoDesde<=Periodo && Periodo<=PeriodoHasta)
                         {
                          if(row1.getCell(10).toString().length()>5){//se asegura que no entre un valor con menor catidad de posiciones

                            if(busca(Asignaturas,row1.getCell(10).toString().replace(" ","").trim().substring(0,6))){//consulta por codigo parseado.
                            int aux=Integer.parseInt((((ArrayList)Asignaturas.get((Pocision(Asignaturas, row1.getCell(10).toString().replace(" ","").trim().substring(0,6),"porPeriodo")))).get(2)).toString().replace(" ","").trim());
                            aux++;
                            ((ArrayList)Asignaturas.get((Pocision(Asignaturas, row1.getCell(10).toString().replace(" ","").trim().substring(0,6),"porPeriodo")))).set(2, aux);
                                 }
                         }
                    }
                }
             }
        }
//        System.out.println("*******************************************************************"+Asignaturas);
        return Asignaturas;
    }



    public static ArrayList porProfesor(String ruta,Double PeriodoDesde, Double PeriodoHasta, int CantidadPeriodos) throws FileNotFoundException, IOException{

        CantidadPorProfesor=new ArrayList();
//        String ruta = Ruta;
        Double Desde=PeriodoDesde;
        Double Hasta=PeriodoHasta;
        HSSFWorkbook libro = new HSSFWorkbook(new FileInputStream(ruta));
        HSSFSheet hoja = libro.getSheet(libro.getSheetName(0));
        HSSFRow row = null;
        HSSFCell cell = null;
        Double Apr=0.0,Total=0.0,Porcent=0.0;
        int Estado=8;
        int AñoSemestre=2;
        int rut =0;
        int j=0;
        /* RECORRE DOCUMENTO*/
        for ( int i=1, z=hoja.getLastRowNum(); i<=z; i++ )
        {
           row = hoja.getRow(i);
           if (row != null) {
                cell = row.getCell((int) AñoSemestre);
             if (cell != null)
                {
                /*Obtiene AñoSemestre de la celda*/
                String StrAux=new String();
                StrAux= cell.getStringCellValue().trim();//obtiene valor de celda como String y elimina espacios con "trim"
                StrAux=StrAux.replace(" ", "");//Elimina Espacios Internos
                Double Periodo=Double.parseDouble(StrAux.substring(0,4));//separa el año desde el String y lo convierte en double

                if(StrAux.substring(5).equals("2")){//si el periodo corresponde al segundo semestre agrega 0.5 al año almacenado en Periodo
                Periodo=Periodo+0.5;//Periodo continene el año Extraido como Double.
                    }
                /*FIN OBTENCION AÑOSEMESTRE*/
                              if(Desde<=Periodo && Periodo<=Hasta)
                         {
                              String celda;
                              celda = row.getCell((int) Estado).toString().trim();
                              celda.replace(" ", "");
                           if(celda.equals("APR"))// Verifica que celda alumno aprobado.
                                {
//
                               if(busca(CantidadPorProfesor,row.getCell((int)11).toString())){
//                                    int pos=(Pocision(DetalleAprobacion, row.getCell((int)AñoSemestre).toString()));
                                    int aux=Integer.parseInt((((ArrayList)CantidadPorProfesor.get((Pocision(CantidadPorProfesor, row.getCell(11).toString().replace(" ","").trim(),"porProfesor")))).get(1)).toString().replace(" ","").trim());
                                    aux++;
                                    ((ArrayList)CantidadPorProfesor.get((Pocision(CantidadPorProfesor, row.getCell(11).toString(),"porPeriodo")))).set(1, aux);
                                    aux=Integer.parseInt((((ArrayList)CantidadPorProfesor.get((Pocision(CantidadPorProfesor, row.getCell(11).toString().replace(" ","").trim(),"porProfesor")))).get(2)).toString().replace(" ","").trim());
                                    aux++;
                                    ((ArrayList)CantidadPorProfesor.get((Pocision(CantidadPorProfesor, row.getCell(11).toString(),"porProfesor")))).set(2, aux);

                               }else{
                                    CantidadPorProfesor.add(new ArrayList());
                                    ((ArrayList)CantidadPorProfesor.get(j)).add(row.getCell(11).toString().replace(" ", "").trim());
                                    ((ArrayList)CantidadPorProfesor.get(j)).add(1);//total aprobados
                                    ((ArrayList)CantidadPorProfesor.get(j)).add(1);//total general
                                    j++;

                               }
                            }else{
                              if(busca(CantidadPorProfesor,row.getCell((int)11).toString())){
//                                    int pos=(Pocision(DetalleAprobacion, row.getCell((int)AñoSemestre).toString()));
                                    int aux=Integer.parseInt((((ArrayList)CantidadPorProfesor.get((Pocision(CantidadPorProfesor, row.getCell(11).toString().replace(" ","").trim(),"porProfesor")))).get(2)).toString().replace(" ","").trim());
                                    aux++;
                                    ((ArrayList)CantidadPorProfesor.get((Pocision(CantidadPorProfesor, row.getCell(11).toString(),"porProfesor")))).set(2, aux);


                               }else{
                                    CantidadPorProfesor.add(new ArrayList());
                                    ((ArrayList)CantidadPorProfesor.get(j)).add(row.getCell(11).toString().replace(" ", "").trim());
                                     ((ArrayList)CantidadPorProfesor.get(j)).add(0);//total aprobados
                                    ((ArrayList)CantidadPorProfesor.get(j)).add(1);
                                    j++;
                             }
                           }
                        }
                }
         }
   }
//        System.out.println(CantidadPorProfesor);
        return CantidadPorProfesor;
}
public static ArrayList porPorAreaDeConoc(String RutaMalla, String rutaFuente,Double PeriodoDesde, Double PeriodoHasta, int CantidadPeriodos) throws FileNotFoundException, IOException{
         /**LLENA ARREGLO CON CODIGOS DE ASIGNTURAS**/
        CantidadPorAreaDeConocimiento=new ArrayList();
        String ruta = RutaMalla;
        HSSFWorkbook libro = new HSSFWorkbook(new FileInputStream(ruta));
        HSSFSheet hoja = libro.getSheet(libro.getSheetName(0));
        HSSFRow row = null;
        HSSFCell cell = null;
        int j=0;

        /* RECORRE DOCUMENTO*/
        for ( int i=1, z=hoja.getLastRowNum(); i<=z; i++ )
        {
           row = hoja.getRow(i);
           if (row != null) {
                cell = row.getCell(4);//captura el año semestre
             if (cell != null)
                {
                   if(!busca(CantidadPorAreaDeConocimiento,row.getCell(4).toString().replace(" ", "").trim())){
                   CantidadPorAreaDeConocimiento.add(new ArrayList()); //contiene los datos de la malla
                  ((ArrayList)CantidadPorAreaDeConocimiento.get(j)).add(row.getCell(4).toString().replace(" ", "").trim());//AreaConocimiento
                  ((ArrayList)CantidadPorAreaDeConocimiento.get(j)).add((int)0);//nuemro entero para contabilizar APR
                  ((ArrayList)CantidadPorAreaDeConocimiento.get(j)).add((int)0);//nuemro entero para total 
                  j++;
                    }
                }else{
                    JOptionPane.showMessageDialog(null,"Datos Incorrectos, por favor, revise la Fuente de Datos.");
                }
             }
        }

        Double Desde=PeriodoDesde;
        Double Hasta=PeriodoHasta;
        HSSFWorkbook libro1 = new HSSFWorkbook(new FileInputStream(rutaFuente));
        HSSFSheet hoja1 = libro1.getSheet(libro1.getSheetName(0));
        HSSFRow row1 = null;
        HSSFCell cell1 = null;
        int Estado=8;
        int AñoSemestre=2;
        int j1=0;
        /* RECORRE DOCUMENTO*/
        for ( int i=1, zz=hoja1.getLastRowNum(); i<=zz; i++ )
        {
           row1 = hoja1.getRow(i);
           if (row1 != null) {
                cell1 = row1.getCell((int) AñoSemestre);
             if (cell1 != null && row1.getCell(10).toString().replace(" ","").trim().length()>5)
                {
                /*Obtiene AñoSemestre de la celda*/
                String StrAux=new String();
                StrAux= cell1.getStringCellValue().trim();//obtiene valor de celda como String y elimina espacios con "trim"
                StrAux=StrAux.replace(" ", "");//Elimina Espacios Internos
                Double Periodo=Double.parseDouble(StrAux.substring(0,4));//separa el año desde el String y lo convierte en double

                if(StrAux.substring(5).equals("2")){//si el periodo corresponde al segundo semestre agrega 0.5 al año almacenado en Periodo
                Periodo=Periodo+0.5;//Periodo continene el año Extraido como Double.
                    }
                /*FIN OBTENCION AÑOSEMESTRE*/
                        if(Desde<=Periodo && Periodo<=Hasta)
                         {
                              String celdaEstado;
                              celdaEstado= row1.getCell((int) Estado).toString().trim();
                              celdaEstado.replace(" ", "");
                           if(celdaEstado.equals("APR"))// Verifica que celda alumno aprobado.
                                {
                                    String aux= ((ArrayList)Asignaturas.get(Pocision(Asignaturas, row1.getCell(10).toString().replace(" ","").substring(0,6),"porAreaDeConocimiento"))).get(4).toString().replace(" ", "");
                                    int paso=Integer.parseInt(((ArrayList)CantidadPorAreaDeConocimiento.get(Pocision(CantidadPorAreaDeConocimiento,aux, "porAreaDeConocimiento"))).get(1).toString().trim());
                                    paso++;
                                    ((ArrayList)CantidadPorAreaDeConocimiento.get(Pocision(CantidadPorAreaDeConocimiento,aux, "porAreaDeConocimiento"))).set(1,paso);
                                    paso=Integer.parseInt(((ArrayList)CantidadPorAreaDeConocimiento.get(Pocision(CantidadPorAreaDeConocimiento,aux, "porAreaDeConocimiento"))).get(2).toString().trim());
                                    paso++;
                                    ((ArrayList)CantidadPorAreaDeConocimiento.get(Pocision(CantidadPorAreaDeConocimiento,aux, "porAreaDeConocimiento"))).set(2,paso);

                               }else{
                                    String aux= ((ArrayList)Asignaturas.get(Pocision(Asignaturas, row1.getCell(10).toString().replace(" ","").substring(0,6),"porAreaDeConocimiento"))).get(4).toString().replace(" ", "");
                                    int paso=Integer.parseInt(((ArrayList)CantidadPorAreaDeConocimiento.get(Pocision(CantidadPorAreaDeConocimiento,aux, "porAreaDeConocimiento"))).get(2).toString().trim());
                                    paso++;
                                    ((ArrayList)CantidadPorAreaDeConocimiento.get(Pocision(CantidadPorAreaDeConocimiento,aux, "porAreaDeConocimiento"))).set(2,paso);
                               }
                           }
                        }
                }
         }
        return CantidadPorAreaDeConocimiento;
   }

 
    public static ArrayList InstanciaDeAprobación(String ruta,Double PeriodoDesde, Double PeriodoHasta, int CantidadPeriodos) throws FileNotFoundException, IOException, InterruptedException{

        CantidadPorProfesor=new ArrayList();
        Double Desde=PeriodoDesde;
        Double Hasta=PeriodoHasta;
        HSSFWorkbook libro = new HSSFWorkbook(new FileInputStream(ruta));
        HSSFSheet hoja = libro.getSheet(libro.getSheetName(0));
        HSSFSheet hoja2 = libro.getSheet(libro.getSheetName(0));
        HSSFRow row = null;
        HSSFRow row2 = null;
        HSSFCell cell = null;
        HSSFCell cell2 = null;
        int PrimeraInstancia=0,SegundaInstancia=0,MasdeSegundaInstancia=0,total=0;
        int j=0;

        /* RECORRE DOCUMENTO*/
        for ( int i=1, z=hoja.getLastRowNum(); i<=z; i++ )
        {
           int Instancias=0;
           row = hoja.getRow(i);
           if (row != null) {
                cell = row.getCell((int) 2);
             if (cell != null)
                {
                /*Obtiene AñoSemestre de la celda*/
                String StrAux=new String();
                StrAux= cell.getStringCellValue().trim();//obtiene valor de celda como String y elimina espacios con "trim"
                StrAux=StrAux.replace(" ", "");//Elimina Espacios Internos
                Double Periodo=Double.parseDouble(StrAux.substring(0,4));//separa el año desde el String y lo convierte en double

                if(StrAux.substring(5).equals("2")){//si el periodo corresponde al segundo semestre agrega 0.5 al año almacenado en Periodo
                Periodo=Periodo+0.5;//Periodo continene el año Extraido como Double.
                    }
                /*FIN OBTENCION AÑOSEMESTRE*/
                         if(Desde<=Periodo && Periodo<=Hasta)
                         {
                              String celda;
                              celda = row.getCell((int) 8).toString().trim();
                              celda.replace(" ", "");
                           if(celda.equals("APR"))// Verifica que celda alumno aprobado.
                                {
                                    total++;
                                    ArrayList AsignaturaAprobada=new ArrayList();
                                    AsignaturaAprobada.add(row.getCell(0).toString().replace(" ", "").trim());
                                    AsignaturaAprobada.add(row.getCell(4).toString().replace(" ", "").trim());
                                    AsignaturaAprobada.add(row.getCell(8).toString().replace(" ", "").trim());
                                    AsignaturaAprobada.add(row.getCell(6).toString().replace(" ", "").trim());
//                                    System.out.println(AsignaturaAprobada);
                                    ArrayList ArregloSegunRutyRPR = new ArrayList();
                                    ArregloSegunRutyRPR=LlenaArregloConRutEspecifico(AsignaturaAprobada.get(0).toString().replace(" ", "").trim());
//                                    System.out.println(ArregloSegunRutyRPR);

                                    for (int o=0; o<ArregloSegunRutyRPR.size(); o++){
                                     
//                                        System.out.println("paseporaki"+((ArrayList)ArregloSegunRutyRPR.get(o)).get(0)+" "+((ArrayList)ArregloSegunRutyRPR.get(o)).get(4)+" "+((ArrayList)ArregloSegunRutyRPR.get(o)).get(8));
                                    
                                            if(((ArrayList)ArregloSegunRutyRPR.get(o)).get(4).toString().replace(" ", "").equals(AsignaturaAprobada.get(1).toString().replace(" ", ""))){
//                                                System.out.println("Encontré un reprobado con el rut y la asignatura que buscas"+AsignaturaAprobada.get(3));

                                                Instancias++;
                                            }              
                                      
                                    }
                                    if(Instancias==0)PrimeraInstancia++;
                                    if(Instancias==1)SegundaInstancia++;
                                    if(Instancias>1)MasdeSegundaInstancia++;
                                }
                        }
                   }
            }
    }
//        System.out.println(PrimeraInstancia+"  "+SegundaInstancia+"  "+MasdeSegundaInstancia+"  "+total);
        ArrayList InstanciasAprobacion=new ArrayList();
        InstanciasAprobacion.add(PrimeraInstancia);
        InstanciasAprobacion.add(SegundaInstancia);
        InstanciasAprobacion.add(MasdeSegundaInstancia);
        InstanciasAprobacion.add(total);

        return InstanciasAprobacion;
}

    
    private static boolean busca(ArrayList Arreglo, String Loquesebusca){
     
        for(int i=0; i<Arreglo.size();i++){
            String aux =(((ArrayList)Arreglo.get(i)).get(0)).toString().replace(" ", "").trim();
            if (aux == null ? Loquesebusca == null : aux.equals(Loquesebusca.replace(" ", "").trim())){
                return true;
            }
        }
        return false;
     }

    private static int Pocision(ArrayList Arreglo, String Loquesebusca,String MetodoQueLlama){
//        System.out.println(Arreglo);
        if(MetodoQueLlama.equals("porPeriodo")){
        for(int i=0; i<Arreglo.size();i++){
            String aux =(((ArrayList)Arreglo.get(i)).get(0)).toString().replace(" ", "").trim();
//            System.out.println(Loquesebusca+"<<porPeriodo>>"+aux);
            if (aux == null ? Loquesebusca == null : aux.equals(Loquesebusca.replace(" ", "").trim())){
                return i;
            }
          }
        }
        if(MetodoQueLlama.equals("porProfesor")){
        for(int i=0; i<Arreglo.size();i++){
            String aux =(((ArrayList)Arreglo.get(i)).get(0)).toString().replace(" ", "").trim();
//            System.out.println(Loquesebusca+"<<porProfesor>>"+aux);
            if (aux == null ? Loquesebusca == null : aux.equals(Loquesebusca.replace(" ", "").trim())){
                return i;
            }
         }
        }
        if(MetodoQueLlama.equals("porAreaDeConocimiento")){
        for(int i=0; i<Arreglo.size();i++){
            String aux =(((ArrayList)Arreglo.get(i)).get(0)).toString().replace(" ", "").trim();
//            System.out.println(Loquesebusca+"<<porAreaDeConocimiento>>"+aux);
            if (aux == null ? Loquesebusca == null : aux.equals(Loquesebusca.replace(" ", "").trim())){
                return i;
            }
         }
        }
        return -1;
     }

     private static ArrayList LlenaArregloConRutEspecifico(String Rut) throws FileNotFoundException, IOException{
        
        ArrayList ArregloDatosEspecificos=new ArrayList();
        int j=0;
        for(int z=0; z<RPR.size();z++){
     
                           if(((ArrayList)RPR.get(z)).get(0).equals(Rut))// Verifica que celda alumno aprobado.
                                {
                                
                             ArregloDatosEspecificos.add(new ArrayList());
                            ((ArrayList)ArregloDatosEspecificos.get(j)).add(((ArrayList)RPR.get(z)).get(0).toString().replace(" ", ""));
                            ((ArrayList)ArregloDatosEspecificos.get(j)).add(((ArrayList)RPR.get(z)).get(1).toString().replace(" ", ""));
                            ((ArrayList)ArregloDatosEspecificos.get(j)).add(((ArrayList)RPR.get(z)).get(2).toString().replace(" ", ""));
                            ((ArrayList)ArregloDatosEspecificos.get(j)).add(((ArrayList)RPR.get(z)).get(3).toString().replace(" ", ""));
                            ((ArrayList)ArregloDatosEspecificos.get(j)).add(((ArrayList)RPR.get(z)).get(4).toString().replace(" ", ""));
                            ((ArrayList)ArregloDatosEspecificos.get(j)).add(((ArrayList)RPR.get(z)).get(5).toString().replace(" ", ""));
                            ((ArrayList)ArregloDatosEspecificos.get(j)).add(((ArrayList)RPR.get(z)).get(6).toString().replace(" ", ""));
                            ((ArrayList)ArregloDatosEspecificos.get(j)).add(((ArrayList)RPR.get(z)).get(7).toString().replace(" ", ""));
                            ((ArrayList)ArregloDatosEspecificos.get(j)).add(((ArrayList)RPR.get(z)).get(8).toString().replace(" ", ""));
                            ((ArrayList)ArregloDatosEspecificos.get(j)).add(((ArrayList)RPR.get(z)).get(9).toString().replace(" ", ""));
                            ((ArrayList)ArregloDatosEspecificos.get(j)).add(((ArrayList)RPR.get(z)).get(10).toString().replace(" ", ""));
                            ((ArrayList)ArregloDatosEspecificos.get(j)).add(((ArrayList)RPR.get(z)).get(11).toString().replace(" ", ""));
                            j++;
                            }else{
                             
                            }
                        }
        return ArregloDatosEspecificos;
    }
}
    